Fix a few memory leaks wrt to translations
authorMatthias Clasen <mclasen@redhat.com>
Mon, 29 Apr 2013 01:43:49 +0000 (21:43 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 29 Apr 2013 01:43:49 +0000 (21:43 -0400)
Pointed out in https://bugzilla.gnome.org/show_bug.cgi?id=699016
The fix here is slightly different. We make
_gtk_builder_parser_translate return a const char * instead of
a dup'ed string, and fix up the callers.

gtk/gtkbuilderparser.c
gtk/gtkbuilderprivate.h
gtk/gtkcelllayout.c
gtk/gtkcomboboxtext.c
gtk/gtkcontainer.c
gtk/gtkliststore.c
gtk/gtkscale.c
gtk/gtkwidget.c

index 9a4b4062e2eb91b7dd4938d52532a3c9bf762bf1..6e42972e900b24397bac527dd3c76a0e87f09e86 100644 (file)
@@ -1015,19 +1015,19 @@ start_element (GMarkupParseContext *context,
                   element_name);
 }
 
-gchar *
+const gchar *
 _gtk_builder_parser_translate (const gchar *domain,
                               const gchar *context,
                               const gchar *text)
 {
-  const char *s;
+  const gchar *s;
 
   if (context)
     s = g_dpgettext2 (domain, context, text);
   else
     s = g_dgettext (domain, text);
 
-  return g_strdup (s);
+  return s;
 }
 
 /* Called for close tags </foo> */
@@ -1128,15 +1128,14 @@ end_element (GMarkupParseContext *context,
 
           if (prop_info->translatable && prop_info->text->len)
             {
-             prop_info->data = _gtk_builder_parser_translate (data->domain,
-                                                              prop_info->context,
-                                                              prop_info->text->str);
+              prop_info->data = g_strdup (_gtk_builder_parser_translate (data->domain,
+                                                                         prop_info->context,
+                                                                         prop_info->text->str));
               g_string_free (prop_info->text, TRUE);
             }
           else
             {
               prop_info->data = g_string_free (prop_info->text, FALSE);
-              
             }
 
           object_info->properties =
index 9af96d9865fbacd441b686b5111cc2954650144d..346459c678d75bd189317943474d66224ec2af9c 100644 (file)
@@ -148,9 +148,9 @@ gboolean  _gtk_builder_flags_from_string (GType       type,
                                          const char *string,
                                          guint      *value,
                                          GError    **error);
-gchar * _gtk_builder_parser_translate (const gchar *domain,
-                                      const gchar *context,
-                                      const gchar *text);
+const gchar * _gtk_builder_parser_translate (const gchar *domain,
+                                             const gchar *context,
+                                             const gchar *text);
 gchar *   _gtk_builder_get_resource_path (GtkBuilder *builder,
                                          const gchar *string);
 gchar *   _gtk_builder_get_absolute_filename (GtkBuilder *builder,
index f9e0ce8d061d7f402d6974bb58dee2ce7c5cdea0..4f6425de8b2fbc9376c5390840bb44bee65ef594 100644 (file)
@@ -812,7 +812,7 @@ cell_packing_end_element (GMarkupParseContext *context,
       /* translate the string */
       if (parser_data->string->len && parser_data->translatable)
        {
-         gchar *translated;
+         const gchar *translated;
          const gchar* domain;
 
          domain = gtk_builder_get_translation_domain (parser_data->builder);
index e09f3ef3c490f825f8ba01b25309015b67d1edcd..3a3154b13be8779e4d7d124a102bcf4833472770 100644 (file)
@@ -234,7 +234,7 @@ item_end_element (GMarkupParseContext *context,
     {
       if (data->translatable)
        {
-         gchar *translated;
+         const gchar *translated;
 
          /* FIXME: This will not use the domain set in the .ui file,
           * since the parser is not telling the builder about the domain.
index 09bfffabd15a3b83a67b8f68707ecd81981cf71f..4a642df2afcda30bd0f851ed65ec968abfa7456b 100644 (file)
@@ -664,8 +664,8 @@ attributes_end_element (GMarkupParseContext *context,
   /* translate the string */
   if (parser_data->string->len && parser_data->translatable)
     {
-      gchar *translated;
-      const gchardomain;
+      const gchar *translated;
+      const gchar *domain;
 
       domain = gtk_builder_get_translation_domain (parser_data->builder);
 
index 467bac0f15dc4da7b0a98336a01fe22f63952e7c..11dae3f92353a77fb60818c2f79948efb089f1ff 100644 (file)
@@ -2555,9 +2555,9 @@ list_store_text (GMarkupParseContext *context,
        * since the parser is not telling the builder about the domain.
        * However, it will work for gtk_builder_set_translation_domain() calls.
        */
-      translated = _gtk_builder_parser_translate (data->domain,
-                                                 info->context,
-                                                 string);
+      translated = g_strdup (_gtk_builder_parser_translate (data->domain,
+                                                            info->context,
+                                                            string));
       g_free (string);
       string = translated;
     }
index 4f739d807992796a0581405466facdd3ecc90ccb..6abd82e1c60cab120545c0ad86882e5143467460 100644 (file)
@@ -1880,7 +1880,7 @@ gtk_scale_buildable_custom_finished (GtkBuildable *buildable,
   if (strcmp (tagname, "marks") == 0)
     {
       GSList *m;
-      gchar *markup;
+      const gchar *markup;
 
       marks_data = (MarksSubparserData *)user_data;
 
index f2f239f050a4e58b1f67913bd86495048635d3c3..f32dab1f493c0e6a95a245b23b92183e1d7352eb 100644 (file)
@@ -13522,7 +13522,7 @@ gtk_widget_buildable_custom_finished (GtkBuildable *buildable,
 
                  if (i < n_actions)
                     {
-                      gchar *description;
+                      const gchar *description;
 
                       if (action_data->translatable && action_data->description->len)
                         description = _gtk_builder_parser_translate (gtk_builder_get_translation_domain (builder),